package util;

import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import android.widget.TextView;

import com.gonfre.quientelo.MyActivity;
import com.gonfre.quientelo.R;

/**
 * Created by Tecnocom on 1/15/2015.
 */
public class DataBaseManager {
    MyActivity m;

    public void syncData(){
        // Consulto si hay cambios en la BD

    }

    public DataBaseManager(MyActivity m){
        this.m = m;
    }

    public SQLiteDatabase getDataBase(MyActivity m, int table_id, int sql_table_id){
        this.m = m;
        //Abrimos la base de datos 'DataBase' en modo escritura
        String table = m.getString(table_id);
        String sql_table = m.getString(sql_table_id);
        MyDataBase gdb = new MyDataBase(m, this, table, sql_table);
        SQLiteDatabase db = gdb.getWritableDatabase();
        return db;
    }

    public void syncLocation(){
        Log.i("Trace DataBaseManager 'syncLocation'", "Se actualiza tabla.");
        AsyncRequest req = new AsyncRequest(this.m, this);
        Response res = new Response();
        String table = m.getString(R.string.table_ubicacion);
        res = req.xGetLocationListByCountry(3, m.getVersionDB(table));
    }

    public void syncCategory(){
        Log.i("Trace DataBaseManager 'syncCategory'", "Se actualiza tabla.");
        AsyncRequest req = new AsyncRequest(this.m, this);
        Response res = new Response();
        String table = m.getString(R.string.table_categoria);
        res = req.xGetFullCategoryList(m.getVersionDB(table));
    }

    public void initData(String table){
        if(table.compareTo(m.getString(R.string.table_ubicacion)) == 0)
            initLocation();
        if(table.compareTo(m.getString(R.string.table_categoria)) == 0)
            initCategory();
    }

    public void initLocation(){
        Log.i("Trace DataBaseManager 'initLocation'", "Se inicia la tabla.");
        AsyncRequest req = new AsyncRequest(this.m, this);
        Response res = new Response();
        String table = m.getString(R.string.table_ubicacion);
        res = req.xGetLocationListByCountry(75, 1);
    }

    public void initCategory(){
        Log.i("Trace DataBaseManager 'initCategory'", "Se inicia la tabla.");
        AsyncRequest req = new AsyncRequest(this.m, this);
        Response res = new Response();
        String table = m.getString(R.string.table_categoria);
        res = req.xGetFullCategoryList(1);
    }

    public void onFinishRequest(MyActivity m, int type, Response res) {
        /*
        * La respuesta Obtenida se lee con los sgtes metodos:
        * getResultStr() -> Retorna la respuesta en String obtenida de la peticion post
        * res.getBodyStr() -> Retorna el body recibido en string
        * res.getHeaderResponse() -> Retorna el valor del atributo "response" del header
        * res.getHeaderMessage() -> Retorna el valor del atributo "message" del header
        * res.getBodyValueStr("x") -> Retorna valor del atributo String "x" que se encuentra en el body
        * res.getBodyValueInt("x") -> Retorna valor del atributo Integer "x" que se encuentra en el body
        * res.getBodyValueArrayStr("list", i, "x") -> Retorna valor del atributo String "x" que se encuentra en la lista "list" en el registro i
        * res.getBodyValueArrayInt("list", i, "x") -> Retorna valor del atributo Integer "x" que se encuentra en la lista "list" en el registro i
        *
        * */
        this.m = m;
        if(type == 16){
            if(res.getHeaderResponse() == 0){
                Log.i("Trace DataBaseManager 'onFinishRequest'", "Se debe actualizar la tabla ubicacion");
                SQLiteDatabase db = getDataBase(this.m, R.string.table_ubicacion, R.string.sql_ubicacion);
                if (db != null) {
                    Log.i("Trace DataBaseManager 'onFinishRequest'", "Se actualiza tabla ubicacion");
                    String id, parent, text, level, sql;
                    // borro los datos de la tabla
                    sql = "DELETE FROM UBICACION";
                    db.execSQL(sql);
                    // Inserto los nuevos datos
                    for (int i = 0; i < res.getListLength("location_list"); i++) {
                        id = res.getBodyValueArrayStr("location_list", i, "id");
                        parent = res.getBodyValueArrayStr("location_list", i, "parent");
                        text = res.getBodyValueArrayStr("location_list", i, "text");
                        level = res.getBodyValueArrayStr("location_list", i, "level");
                        Log.i("Trace DataBaseManager 'onFinishRequest'", id + " - " + text);
                        sql = "INSERT INTO UBICACION (id,ubicacion,nivel,id_padre) values('" + id + "','" + text + "'," + level + "," + parent + ")";
                        db.execSQL(sql);
                    }
                    Log.i("Trace DataBaseManager 'onFinishRequest'", "Se actualiza la version de UBICACION a "+res.getBodyValueStr("version"));
                    // Actualizo la version de la tabla.
                    String table = m.getString(R.string.table_ubicacion);
                    m.setVersionDB(table, res.getBodyValueStr("version"));
                } else {
                    Log.i("Trace DataBaseManager 'onFinishRequest'", "Database KO");
                }
                db.close();
            }else{
                Log.i("Trace DataBaseManager 'onFinishRequest'", "NO se debe actualizar la tabla ubicacion");
            }
        }

        if(type == 17){
            if(res.getHeaderResponse() == 0){
                Log.i("Trace DataBaseManager 'onFinishRequest'", "Se debe actualizar la tabla categoria");
                SQLiteDatabase db = getDataBase(this.m, R.string.table_categoria, R.string.sql_categoria);
                if (db != null) {
                    Log.i("Trace DataBaseManager 'onFinishRequest'", "Se actualiza tabla categoria");
                    String id, name, icon, sql;
                    // borro los datos de la tabla
                    sql = "DELETE FROM CATEGORIA";
                    db.execSQL(sql);
                    // Inserto los nuevos datos
                    for (int i = 0; i < res.getListLength("category_list"); i++) {
                        id = res.getBodyValueArrayStr("category_list", i, "id");
                        name = res.getBodyValueArrayStr("category_list", i, "name");
                        icon = res.getBodyValueArrayStr("category_list", i, "icon");
                        Log.i("Trace DataBaseManager 'onFinishRequest'", id + " - " + name);
                        sql = "INSERT INTO CATEGORIA (id, nombre, icono) values('" + id + "','" + name + "','" + icon + "')";
                        db.execSQL(sql);
                    }
                    Log.i("Trace DataBaseManager 'onFinishRequest'", "Se actualiza la version de CATEGORIA a "+res.getBodyValueStr("version"));
                    // Actualizo la version de la tabla.
                    String table = m.getString(R.string.table_categoria);
                    m.setVersionDB(table, res.getBodyValueStr("version"));
                } else {
                    Log.i("Trace DataBaseManager 'onFinishRequest'", "Database KO");
                }
                db.close();
            }else{
                Log.i("Trace DataBaseManager 'onFinishRequest'", "NO se debe actualizar la tabla categoria");
            }
        }
    }
}
